home *** CD-ROM | disk | FTP | other *** search
/ STraTOS 1997 April & May / STraTOS 1 - 1997 April & May.iso / CD01 / UTILS / @FALCON / DESKAPPL / DESKAPPL.GFA (.txt) < prev    next >
Encoding:
GFA-BASIC Atari  |  1997-01-04  |  15.2 KB  |  457 lines

  1. ' DESKAPPL.GFA
  2. ' Desktop Applications Luncher  ╜ '96-'97 by DuschnouK
  3. ' V. 1.02 - 04/01/97
  4. ' Système de lancement automatique de programmes à partir du bureau.
  5. ' Le principe est d'installer ce programme comme lien à tous les types de
  6. ' fichier, puis celui-ci se charge d'appeller les programmes voulus...
  7. ' Cela permet ainsi d'économiser de nombreux octets dans la mémoire du
  8. ' Newdesk, limité à 4Ko.
  9. '
  10. ' Maintenant, en mettant le signe "%" devant un programme, on ne met que le
  11. ' nom du fichier, sans son chemin.
  12. '
  13. ' On récupère les paramètres :
  14. CLEAR
  15. ~SHEL_READ(cmd$,tail$)
  16. tail$=UPPER$(tail$)
  17. cmd$=UPPER$(cmd$)
  18. '
  19. ' On récupère le chemin actuel :
  20. d$=LEFT$(cmd$,RINSTR(cmd$,"\"))
  21. '
  22. IF tail$=""     ! Si le programme a été lancé, c'est qu'on veut l'installer
  23.   @installe
  24.   END
  25. ENDIF
  26. ' Initialisation des paramètres :
  27. @init
  28. '
  29. ' On détermine quelle est l'extention du fichier
  30. chercher&=LEN(tail$)-RINSTR(tail$,".")
  31. IF chercher&<LEN(tail$)-RINSTR(tail$,"\")     ! Si il y bien un .xxx
  32.   ext$=RIGHT$(tail$,chercher&)                ! On récupère l'extension
  33. ELSE
  34.   ext$="Y'a rien !"           ! Sinon, on met une extension impossible...
  35. ENDIF
  36. ext$=UPPER$(ext$)
  37. '
  38. '
  39. ' On détermine à quel programme est rattaché le fichier suivant son extention
  40. find!=FALSE
  41. FOR i&=1 TO 500
  42.   EXIT IF prg$(i&,0)=""
  43.   FOR j&=1 TO 30
  44.     IF ext$=prg$(i&,j&)
  45.       find!=TRUE
  46.     ENDIF
  47.     EXIT IF find!
  48.     EXIT IF prg$(i&,j&)=""
  49.   NEXT j&
  50.   EXIT IF find!
  51. NEXT i&
  52. '
  53. IF NOT find!
  54.   ' Si aucune des extentions n'est trouvée dans la liste, 2 alternatives :
  55.   ' 1 : C'est un programme (extention ttp,tos,prg,app,gtp) et on le lance
  56.   ' 2 : C'est pas un prg, alors on lance le viewer par défaut (prg$(0,0))
  57.   '  Écoute bien ce NB1, c'est important !
  58.   ' NB1 : Pour le lancement de programme, une subtilité est à savoir, qui m'
  59.   ' a pris 1 heure de tests... C'est que quand on récupère le Tail (tail$), il
  60.   ' y a un caractère parasite qui est généré au tout début... Apparament, il
  61.   ' FAUT LE GARDER pour les programmes qui ont un fichier lié, sinon le prg
  62.   ' lancé ne retrouvera pas le fichier (!) ; mais il faut le VIRER quand on
  63.   ' appelle un programme, sinon il ne le trouve pas !!!
  64.   ' NB2 : En principe aucun programme ne se retrouvera intercepté par DeskAppl,
  65.   ' à moins que vous ne l'installiez avec une extentions de programme, qui
  66.   ' permet de contrôler le passage des paramètres, mais bloque le drag'n'drop.
  67.   ' NB3 : QUI A DIT : "Poukoi k'il a pas fait là un Select/Case ?" ?!?
  68.   ' La réponse est simple : LE COMPILATEUR DU GFA PLANTE !!
  69.   ' => Cet imbécile de GFA avec le Select/Case regardais les 2 derniers
  70.   ' caractères seulement... Résultat : si on avait un fichier .PP il croyais
  71.   ' que c'était un .APP et le lançais kom prg !!
  72.   ' Évidemment ce bug ne se manifeste qu'une fois le prg compilé...
  73.   '
  74.   IF ext$="TTP" OR ext$="TOS"
  75.     grf&=0
  76.     gem&=0
  77.     '  On enlève le 1er caractère du tail$, cf NB1
  78.     ~SHEL_WRITE(1,grf&,gem&,"",RIGHT$(tail$,LEN(tail$)-1))
  79.   ELSE IF ext$="PRG" OR ext$="APP" OR ext$="GTP"
  80.     grf&=1
  81.     gem&=1
  82.     '  On enlève le 1er caractère du tail$, cf NB1
  83.     ~SHEL_WRITE(1,grf&,gem&,"",RIGHT$(tail$,LEN(tail$)-1))
  84.   ELSE
  85.     i&=0
  86.     find!=TRUE
  87.   ENDIF
  88. ENDIF
  89. '
  90. ' On détermine quel est le type du programme...
  91. IF find!
  92.   chercher&=LEN(prg$(i&,0))-RINSTR(prg$(i&,0),".")
  93.   IF chercher&<LEN(prg$(i&,0))-RINSTR(prg$(i&,0),"\")    ! Si il y bien un .xxx
  94.     ext$=RIGHT$(prg$(i&,0),chercher&)
  95.   ELSE                                          ! Sinon rien
  96.     ext$=""
  97.   ENDIF
  98.   ext$=UPPER$(ext$)
  99.   '  Idem, pas de Select/Case car le compilateur plante.
  100.   IF ext$="TTP" OR ext$="TOS"
  101.     grf&=0
  102.     gem&=0
  103.     @conf_desk
  104.   ELSE IF ext$="PRG" OR ext$="APP" OR ext$="GTP"
  105.     grf&=1
  106.     gem&=1
  107.     @conf_desk
  108.   ELSE
  109.     CLS
  110.     IF ext$=""
  111.       PRINT "Vous avez omis de préciser quel était le programme de défaut."
  112.       PRINT "Veuillez l'indiquer en éditant DESKAPPL.IDX avec un éditeur de texte,"
  113.       PRINT "en modifiant la 1ère ligne."
  114.       PRINT "Exemple : E:\7UP\7UP.APP,@"
  115.     ELSE
  116.       PRINT "Votre programme :"'prg$(i&,0)
  117.       PRINT "A une mauvaise extension."
  118.     ENDIF
  119.     @click
  120.   ENDIF
  121. ENDIF
  122. END
  123. '
  124. '
  125. > PROCEDURE init
  126.   DIM prg$(500,30)
  127.   OPEN "I",#1,d$+"DESKAPPL.IDX"
  128.   FOR i&=0 TO 500
  129.     FOR j&=0 TO 30
  130.       INPUT #1,ga$
  131.       IF ga$<>"@"       ! SI CE N'EST PAS LA FIN DE LA LISTE(@) ON LIT
  132.         prg$(i&,j&)=UPPER$(ga$)
  133.       ENDIF
  134.       EXIT IF ga$="@"   ! ON SE CASSE SI ON A (@)
  135.     NEXT j&
  136.     ' SI LE PREMIER CARACTèRE ÉTAIT "@" C'EST QUE C'EST LA FIN DE LA LISTE
  137.     EXIT IF j&=0
  138.   NEXT i&
  139.   CLOSE #1
  140. RETURN
  141. > PROCEDURE installe
  142.   CLS
  143.   PRINT "                         Desktop Applications Luncher"
  144.   PRINT "                             ╜ 1997 by DuschnouK"
  145.   PRINT "                                  \V. 1.02/"
  146.   PRINT "                        - Ce logiciel est un Freeware -"
  147.   PRINT
  148.   PRINT "Installation du programme."
  149.   PRINT "Avant tout, procédez à une sauvegarde de vos Newdesk.inf, car ils vont"
  150.   PRINT "être directement modifiés."
  151.   PRINT
  152.   ALERT 0,"|Bien compris ?  |",1,"Ok",cl&
  153.   FILESELECT #"Où est DESKAPPL.PRG ?",d$+"DESKAPPL.PRG","DESKAPPL.PRG",deskappl$
  154.   cl2&=1
  155.   DO
  156.     ALERT 2,"Quelle opération voulez-vous :|- Installer DeskAppL|- Enlever DeskAppL|- Nettoyer le Newdesk.inf",cl2&,"Installe|Enlève|Nettoie",cl2&
  157.     FILESELECT #"Choisir un fichier Newdesk.inf",d$+"*.in?","",ga$
  158.     d$=LEFT$(ga$,RINSTR(ga$,"\"))
  159.     IF EXIST(ga$) AND EXIST(deskappl$)
  160.       CLS
  161.       DIM lignes$(5000)
  162.       DIM index$(500,1)
  163.       OPEN "I",#1,ga$
  164.       RECALL #1,lignes$(),-1,nblignes#
  165.       CLOSE #1
  166.       DEC nblignes#    ! Car On commence à 0
  167.       l&=0
  168.       FOR i&=0 TO nblignes#
  169.         l&=l&+LEN(lignes$(i&))
  170.       NEXT i&
  171.       '
  172.       @nettoyage                  ! Dans tous les cas, on enlève la poussière ;-)
  173.       SELECT cl2&
  174.       CASE 1                              ! On installe DeskAppL :-)
  175.         '  Installation de DESKAPPL.PRG.
  176.         ' On doit l'installer juste après les lignes #W
  177.         '
  178.         wtest!=FALSE
  179.         FOR i&=4 TO nblignes#
  180.           IF LEFT$(lignes$(i&),2)="#W"  ! Si c'est une ligne #W
  181.             wtest!=TRUE                 ! Alors on signale qu'on est passé dessus...
  182.           ENDIF
  183.           '  Et on se casse dès qu'on a quitté les lignes #W
  184.           EXIT IF wtest! AND LEFT$(lignes$(i&),2)<>"#W"
  185.         NEXT i&
  186.         '
  187.         '  Si on ne commence pas par #G ou "#N FF 04 000 @ *.*@ @" ! V. 1.01 !
  188.         IF LEFT$(lignes$(i&),2)<>"#G" AND LEFT$(lignes$(i&),21)<>"#N FF 04 000 @ *.*@ @"
  189.           INSERT lignes$(i&)="#G 03 04 200 "+deskappl$+"@ *.*@ "      ! On insert une ligne
  190.           INC nblignes#                                          ! Incrémentation
  191.         ELSE
  192.           '  Sinon ça signifie que c'était déjà installé, et on modifie simplement :
  193.           lignes$(i&)="#G 03 04 200 "+deskappl$+"@ *.*@ "
  194.         ENDIF
  195.         ' ! V. 1.01 !
  196.         FOR j&=i& TO nblignes#
  197.           IF LEFT$(lignes$(j&),21)="#N FF 04 000 @ *.*@ @"
  198.             DELETE lignes$(j&)
  199.             DEC j&
  200.             DEC nblignes#
  201.           ENDIF
  202.         NEXT j&
  203.         '
  204.         '  Dans les lignes suivantes, on va récupérer les programmes déjà installés
  205.         j&=1    ! L'indice 0 est pour le prg par défaut
  206.         FOR i&=i&+1 TO nblignes#
  207.           '  Ça correspond aux lignes qui indiquent au TOS quels sont les fichiers
  208.           ' correspondants à des programmes
  209.           ckoa$=LEFT$(lignes$(i&),2)
  210.           IF ckoa$="#G" OR ckoa$="#Y" OR ckoa$="#P" OR ckoa$="#F"
  211.             IF LEN(lignes$(i&))>24     ! Si ce n'est pas une information système
  212.               IF MID$(lignes$(i&),11,2)="00"
  213.                 ' Si un programme est installé, mais qu'il n'est pas affecté à une
  214.                 ' touche de fonction, on récupère son chemin et paramètre et on le vire
  215.                 IF INSTR(lignes$(i&),"@ @")<>0
  216.                   index$(j&,0)=MID$(lignes$(i&),14,INSTR(lignes$(i&),"@")-14)
  217.                   index$(j&,1)=MID$(lignes$(i&),INSTR(lignes$(i&),"*.")+2,INSTR(lignes$(i&),"@ @")-INSTR(lignes$(i&),"*.")-2)
  218.                   IF index$(j&,1)<>"*"    ! Si ce programme ne prend pas tous les fichiers
  219.                     DELETE lignes$(i&)    ! On le vire de la liste
  220.                     DEC nblignes#          ! Et on n'oublie pas de remettre ses pointeurs
  221.                     DEC i&                ! Une case avant...
  222.                     INC j&
  223.                   ELSE                    ! Sinon c'est que y'a un pb !
  224.                     DELETE lignes$(i&)    ! Et on le vire !
  225.                     DEC nblignes#
  226.                   ENDIF
  227.                 ELSE                    ! Sinon y'a aussi un pb...
  228.                   DELETE lignes$(i&)    ! Et on le vire !
  229.                   DEC nblignes#
  230.                 ENDIF
  231.               ENDIF
  232.             ENDIF
  233.           ENDIF
  234.         NEXT i&
  235.         DEC j&          ! Il y a tjs un j& de trop
  236.         '
  237.         ' Maintenant on va à nouveau installer DeskAppL, mais avec une extention
  238.         ' folklorique, de manière à ne pas bloquer l'installation de nouveaux
  239.         ' programmes... ╢ noter qu'on peut aussi mettre comme extention finale
  240.         ' *.TTP ou *.GTP pour que le programme gère la ligne de commande... Mais
  241.         ' dans ce cas, le drag'n'drop ne marchera plus !
  242.         '
  243.         ' Donc d'abord on vire les éventuelles installation déjà faites...
  244.         FOR i&=nblignes#-4 TO nblignes#
  245.           IF LEFT$(lignes$(i&),12)="#G 03 04 200"
  246.             DELETE lignes$(i&)
  247.             DEC i&
  248.             DEC nblignes#
  249.           ENDIF
  250.         NEXT i&
  251.         '
  252.         '  Ici, vous pouvez décider que DeskAppL va intercepter certains types
  253.         ' de programmes (ttp,gtp...) pour gérer la ligne de commande...
  254.         ' Mais le Drag'n'drop risque de ne plus fonctionner.
  255.         '       lignes$(nblignes+1)="#G 03 04 200 "+deskappl$+"@ *.TTP@ "
  256.         '       INC nblignes
  257.         '
  258.         d2$=LEFT$(deskappl$,RINSTR(deskappl$,"\"))
  259.         dskidx!=EXIST(d2$+"DESKAPPL.IDX")
  260.         IF dskidx!
  261.           ALERT 1,"|Remplacer, ajouter|les paramètres ou ne|rien faire ?",3,"Remplace|Ajoute|Rien",cl&
  262.         ENDIF
  263.         '
  264.         CLS
  265.         FOR i&=0 TO nblignes#
  266.           l&=l&-LEN(lignes$(i&))
  267.         NEXT i&
  268.         PRINT "Votre Newdesk.inf a perdu"'l&'"octets."
  269.         ' Le programme installé en *.doc ou *.txt est installé en suplément en
  270.         ' viewer par défaut.
  271.         FOR i&=0 TO j&
  272.           IF index$(i&,1)="DOC" OR index$(i&,1)="TXT"
  273.             index$(0,0)=index$(i&,0)
  274.             def!=TRUE
  275.           ENDIF
  276.         NEXT i&
  277.         '
  278.         '
  279.         ' Maintenant on sauve tout
  280.         '
  281.         PRINT "Sauvegarde en cours..."
  282.         PRINT ga$
  283.         OPEN "O",#1,ga$
  284.         STORE #1,lignes$(),nblignes#+1      ! STORE génère un CR/LF indispensable...
  285.         CLOSE #1
  286.         PRINT "Les éventuelles lignes foireuses on étés suprimées..."
  287.         PRINT "=> En principe, tous les problèmes de racourcis claviers qui sautent,"
  288.         PRINT "et autres programmes auto-boot qui ne se chargent pas sont résolus :-)"
  289.         IF cl&=1 OR NOT dskidx!
  290.           PRINT d2$+"DESKAPPL.IDX"
  291.           OPEN "O",#1,d2$+"DESKAPPL.IDX"    ! Open, on remplace tout
  292.           PRINT #1,index$(0,0)+",@"   ! C'est le programme par défaut
  293.           IF def!
  294.             PRINT "Le viewer par défaut est"'index$(0,0)
  295.           ELSE
  296.             PRINT "Attention : il faudra préciser sur la 1ère ligne quel est"
  297.             PRINT "le programme qui sera utilisé en défaut."
  298.             PRINT "Pour ce faire, éditez DESKAPPL.IDX avec un éditeur de texte (genre 7UP)."
  299.           ENDIF
  300.         ELSE IF cl&=2
  301.           PRINT d2$+"DESKAPPL.IDX"
  302.           OPEN "A",#1,d2$+"DESKAPPL.IDX"    ! Append, on va rajouter les infos
  303.         ENDIF
  304.         IF cl&<>3             ! Si on a pas annulé la modif...
  305.           FOR i&=1 TO j&
  306.             PRINT #1,index$(i&,0)+","+index$(i&,1)+",@"
  307.           NEXT i&
  308.           PRINT #1,"@"      ! C'est fini !!
  309.           CLOSE #1
  310.           PRINT "Les doublons ne sont pas vérifiés..."
  311.         ENDIF
  312.         IF cl&=2
  313.           PRINT "On purge le @ en trop..."
  314.           OPEN "I",#1,d2$+"DESKAPPL.IDX"
  315.           RECALL #1,lignes$(),-1,nblignes#   ! On fait de la réutilisation...
  316.           CLOSE #1
  317.           ' On cherche le @ seul du précédent réglage, et on le vire...
  318.           FOR i&=0 TO nblignes#-1
  319.             EXIT IF lignes$(i&)="@" ! On se casse dès qu'on a trouvé le gros lot !
  320.           NEXT i&
  321.           IF i&<nblignes#-1          ! On sait jamais...
  322.             DELETE lignes$(i&)
  323.           ENDIF
  324.           OPEN "O",#1,d2$+"DESKAPPL.IDX"
  325.           STORE #1,lignes$(),nblignes#
  326.           CLOSE #1
  327.         ENDIF
  328.         IF j&=0 AND cl&=1
  329.           PRINT "DESKAPPL.IDX ne contient aucun programme lié car votre Newdesk.inf n'en"
  330.           PRINT "contenait (en principe) pas... Donc à vous de l'éditer !"
  331.         ELSE IF j&=0 AND cl&=2
  332.           PRINT "Aucune application n'a étée rajoutée car votre Newdesk.inf n'en contenait pas"
  333.         ENDIF
  334.         PRINT "P.S. : Les programmes liés mais qui sont appellables par une touche de"
  335.         PRINT "fonction sont laissés dans le Newdesk.inf."
  336.         PRINT "Installation terminée !"
  337.         PRINT "Chargez"'ga$'"et ça roule !!"
  338.       CASE 2,3                  ! Désintallation ou Nettoyage
  339.         IF cl2&=2
  340.           '  On cherche où a été installé DeskAppL
  341.           FOR i&=0 TO nblignes#
  342.             EXIT IF LEFT$(lignes$(i&),13+LEN(deskappl$))="#G 03 04 200 "+deskappl$
  343.           NEXT i&
  344.           '  Et si on l'a bien trouvé...
  345.           IF i&<nblignes#+1
  346.             '  On réinstalle la gestion de tous les fichiers (*.*) par le GEM
  347.             ' /!\ Ceci est très important, car sinon le GEM va refuser tout
  348.             '     accès à des fichiers autres que les programmes !
  349.             lignes$(i&)="#N FF 04 000 @ *.*@ @ "
  350.             PRINT deskappl$'"a été enlevé de"'ga$;"."
  351.             PRINT "Les programmes liés n'ont pas été réinstallés... Car il vaut mieux le faire à"
  352.             PRINT "la ""main"" pour installer les programmes dont vous avez vraiment besoin."
  353.           ELSE
  354.             PRINT deskappl$'"n'a pas été trouvé..."
  355.             PRINT "La désinstallation n'a pas étée effectuée."
  356.             PRINT "Un truc : installez DeskAppL puis désinstallez-le !"
  357.           ENDIF
  358.         ELSE
  359.           PRINT "Nettoyage..."
  360.         ENDIF
  361.         PRINT "Sauvegarde en cours..."
  362.         PRINT ga$
  363.         OPEN "O",#1,ga$
  364.         STORE #1,lignes$(),nblignes#+1      ! STORE génère un CR/LF indispensable...
  365.         CLOSE #1
  366.       ENDSELECT
  367.       @click
  368.       ERASE lignes$(),index$()    ! On supprime les buffers...
  369.       ALERT 3,"|Voulez-vous définir un|autre Newdesk.inf ?",1,"Oui|Non",cl3&
  370.     ENDIF
  371.   LOOP UNTIL ga$="" OR cl3&=2
  372. RETURN
  373. > PROCEDURE nettoyage
  374.   ' Cette procédure "nettoie" le Newdesk.inf des lignes & messages foireux.
  375.   '
  376.   ' La 3ème ligne DOIT faire 47 octets (y'a 45 espaces nécessaire)
  377.   IF LEFT$(lignes$(3),2)="#d" AND LEN(lignes$(3))<47
  378.     lignes$(3)="#d"+SPACE$(45)
  379.   ENDIF
  380.   ' Ensuite on regarde si y'a un "blob" dans la 4ème ligne : càd en
  381.   ' général que on peut avoir une liste de définition des racourcis clavier
  382.   ' qui sont foireux (et va entraîner un plantage de ces fonctions) ou qu'il
  383.   ' y a un paramêtre d'auto-boot qui y est inclu, du style :
  384.   ' #K 4F 49 52 58 4E #Z 01 @
  385.   '  Une ligne de #K... doit comporter 97 octets, sinon on la vire
  386.   '  Cette ligne #K peut se trouver en 4 ou 5ème position selon qu'il y ai
  387.   ' ou non un programme auto-lancé
  388.   FOR i&=4 TO 5
  389.     IF LEFT$(lignes$(i&),2)="#K"  ! Si c'est une ligne de racourcis clavier
  390.       IF LEN(lignes$(i&))<97      ! Et qu'elle est inférieure à 97 octets
  391.         DELETE lignes$(i&)        ! Alors on la vire
  392.         DEC nblignes#              ! Et on décrémente le nb de lignes !
  393.         del!=TRUE                 ! On a viré une ligne !
  394.       ENDIF
  395.     ENDIF
  396.     EXIT IF del!                  ! On se casse si on a viré une ligne #K
  397.   NEXT i&
  398.   '
  399.   ' ! V 1.01 !
  400.   ' On enlève la ligne "#N FF 04 000 @ *.*@ @" s'il y en a plusieurs
  401.   '
  402.   diese_n!=FALSE
  403.   FOR i&=0 TO nblignes#
  404.     IF LEFT$(lignes$(i&),21)="#N FF 04 000 @ *.*@ @" AND diese_n!
  405.       PRINT i&
  406.       DELETE lignes$(i&)
  407.       DEC nblignes#
  408.       DEC i&
  409.     ELSE IF LEFT$(lignes$(i&),21)="#N FF 04 000 @ *.*@ @"
  410.       diese_n!=TRUE
  411.     ENDIF
  412.   NEXT i&
  413. RETURN
  414. > PROCEDURE click
  415.   PRINT "Cliquez ou appuyez sur une touche..."
  416.   DO
  417.   LOOP UNTIL MOUSEK=0 AND INP?(2)=0
  418.   DO
  419.   LOOP UNTIL MOUSEK OR INP?(2)
  420.   DO
  421.     IF INP?(2)
  422.       ~INP(2)
  423.     ENDIF
  424.   LOOP UNTIL MOUSEK=0 AND INP?(2)=0
  425. RETURN
  426. > PROCEDURE conf_desk
  427.   ' V. 1.02
  428.   ' Permet de donner en paramêtre que le nom du fichier si on met le signe "%"
  429.   ' au début de la ligne.
  430.   ' Ex: vous avez défini le prg :
  431.   ' E:\BHOU\HAHA\BOUM.PRG,KJU,JHT,@
  432.   ' Et ça ne marche pas ? => Testez cela :
  433.   ' %E:\BHOU\HAHA\BOUM.PRG,KJU,JHT,@
  434.   ' Simple non ? Le mode % équivaut au fait de déplacer un fichier sur une icône
  435.   ' de programme (drag & drop).
  436.   ' Il faut savoir que le mode par défaut envoie en paramêtre le nom du fichier
  437.   ' avec son chemin complet. Mais certains prgs peuvent foirer car ils ne
  438.   ' veulent que le nom du fichier, car ils peuvent récupérer le chemin.
  439.   ' Il faut savoir que ce chemin ne peut être QUE celui de la fenêtre active...
  440.   ' Il y a certains prgs comiques qui veulent le chemin d'eux-même, alors qu'ils
  441.   ' peuvent le récupérer dans la ligne de commande... Or après qqs tests, le GEM
  442.   ' annule les modifs au chemin par défaut que l'on peut faire et remet celui
  443.   ' qui avait cours... Donc on ne peut rien faire, sauf à aller voir où il
  444.   ' stocke ça en mémoire, mais c'est pas très simple (amusez-vous à le faire ;-)
  445.   ' Mais bon, ce genre de pb ne concerne guère que 5% des prgs...
  446.   '
  447.   '  S'il y a un signe "%"
  448.   IF LEFT$(prg$(i&,0))="%"      ! Ben dans ce cas il n'aura ke le nom du fichier
  449.     prg$(i&,0)=RIGHT$(prg$(i&,0),LEN(prg$(i&,0))-1)
  450.     '  On veut que le nom du fichier
  451.     ' Le "+1" est une subtilité indispensable, car un caractère étrange
  452.     ' fou la m...
  453.     tail$=RIGHT$(tail$,LEN(tail$)-RINSTR(tail$,"\")+1)
  454.   ENDIF
  455.   ~SHEL_WRITE(1,grf&,gem&,tail$,prg$(i&,0))
  456. RETURN
  457.